package model

import (
	"time"

	"github.com/shopspring/decimal"
	"gorm.io/gorm"
)

type PaymentStatus string // 自定义支付状态枚举类型

const (
	Pending   PaymentStatus = "待支付"
	Paid      PaymentStatus = "已支付"
	Cancelled PaymentStatus = "已取消"
)

type PointsOrder struct {
	OrderID       string          `gorm:"primaryKey;type:varchar(32);column:order_id"` // 主键非自增
	UserID        uint            `gorm:"index;not null"`                              // 外键索引
	Points        int             `gorm:"not null"`                                    // 积分量
	IsDeleted     bool            `gorm:"column:is_deleted;default:false;comment:是否已软删除"`
	Amount        decimal.Decimal `gorm:"type:decimal(10,2);not null"`                 // 金额精度控制
	PaymentStatus PaymentStatus   `gorm:"type:enum('待支付','已支付','已取消');index:idx_payment_status"`
	OrderTime     time.Time       `gorm:"autoCreateTime"` // 自动记录时间
}

// 自定义表名（遵循蛇形复数规则）
func (PointsOrder) TableName() string {
	return "points_order"
}

// 关联用户方法（需确保 User 模型存在）
func (p *PointsOrder) User(db *gorm.DB) (*User, error) {
	var user User
	if err := db.Where("user_id = ?", p.UserID).First(&user).Error; err != nil {
		return nil, err
	}
	return &user, nil
}
